package cn.com.huzo.service.master;

import cn.com.huzo.model.entities.master.MaterialEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 材料信息管理服务对象接口。
 *
 * @author 吴旭
 */
public interface MaterialManager extends GenericManager<MaterialEntity, Long> {

    /**
     * 根据材料表示取得材料信息
     *
     * @param materialId 材料标识
     * @param currentUser 当前用户
     * @param workFlowId 审核流程标识
     * @return
     * @throws Exception
     */
    Map<String, Object> fetchByHeaderKey(Long materialId, Long currentUser, Long workFlowId) throws Exception;

    /**
     * 批量更新材料所属目录。
     *
     * @param itemList 要更新的材料数据列表
     * @return 影响的行数
     * @throws java.lang.Exception
     */
    Integer batchChangeCatalogue(List<MaterialEntity> itemList) throws Exception;

    /**
     * 将给定的CSV文件导入数据库。
     *
     * @param fileName 要导入的数据文件
     * @param userId 操作者
     * @param materialTypeId 材料所属目录ID
     * @param materialFlag 材料标记
     * @return 导入反馈消息
     * @throws java.lang.Exception
     */
    Map<String, Object> importDataFromCsv(String fileName, Long userId, Long materialTypeId, String materialFlag) throws Exception;

    /**
     * 取得材料表的字段列表。
     *
     * @return 字段名和汉字描述列表
     * @throws java.lang.Exception
     */
    List<MaterialEntity> fetchAllFields() throws Exception;

    /**
     * 根据给定导出条件取得材料信息对象。
     *
     * @param filters 导出过滤条件
     * @return 材料信息对象
     * @throws java.lang.Exception
     */
    List<String> fetchExportData(Map<String, Object> filters) throws Exception;

    /**
     * 审核材料
     *
     * @param materialId 材料标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doCheck(Long materialId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode) throws Exception;

    /**
     * 反审审核材料
     *
     * @param materialId 材料标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doUnCheck(Long materialId, Long workFlowId, Short nodeOrder, Long checkedBy) throws Exception;
    
    /**
     * 根据输入的料号从材料信息中自动补全剩余的料号
     *
     * @param keyWord 输入的料号(部分料号)
     * @return
     * @throws java.lang.Exception
     */
    List<String> fetchMaterialCodeForAutoComplate(String keyWord) throws Exception;
}
